<template>
  <view class="container">
    <text>请扫描二维码完成签到</text>
    <!-- 扫描二维码按钮 -->
    <button @click="scanQRCode">扫描二维码</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      qrCodeData: null,  // 用于保存二维码扫描结果
    };
  },
  methods: {
    // 调用摄像头扫描二维码
    scanQRCode() {
      uni.scanCode({
        success: (res) => {
          // 检查二维码扫描结果是否为有效的 JSON 字符串
          let scannedData = {};

          try {
            // 尝试将二维码内容解析为 JSON
            scannedData = JSON.parse(res.result);
            
            // 检查二维码数据中是否包含必需的字段
            if (!scannedData.sessionId || !scannedData.teacherId) {
              throw new Error('二维码数据不完整');
            }
          } catch (error) {
            // 如果解析失败，或者数据不完整，提示用户二维码无效
            console.error('二维码解析错误:', error);
            uni.showToast({
              title: '二维码无效，请重新扫描',
              icon: 'none'
            });
            return; // 结束函数，避免继续处理
          }

          // 如果解析成功并且数据完整，继续提交签到
          // 默认 studentId 为 1，如果二维码中没有 studentId
          scannedData.studentId = scannedData.studentId || 1;  // 默认 studentId 为 1

          // 将扫描到的数据传递给提交签到的函数
          this.submitAttendance(scannedData);
        },
        fail: (err) => {
          uni.showToast({
            title: '扫码失败，请重试',
            icon: 'none'
          });
        }
      });
    },

    // 完成签到，发送请求到后端
    submitAttendance(qrCodeData) {
      // 打印数据，便于调试
      console.log('提交的数据：', qrCodeData);

      // 发送请求到后端，进行签到操作
      uni.request({
        url: 'http://192.168.220.69:8080/attendance-records/scanQRCode',  // 后端扫码签到接口 注意需要修改ip为局域网地址
        method: 'POST',
        data: {
          sessionId: qrCodeData.sessionId,  // 传递 sessionId
          studentId: qrCodeData.studentId,  // 传递 studentId，默认为 1
          teacherId: qrCodeData.teacherId,
          title: qrCodeData.title,
          classId: qrCodeData.classId,
          sessionType: qrCodeData.sessionType,
          startTime: qrCodeData.startTime,
          endTime: qrCodeData.endTime,
          lateRange: qrCodeData.lateRange
        },
        success: (res) => {
          if (res.data.code === 200) {
            uni.showToast({
              title: '签到成功',
              icon: 'success'
            });
          } else {
            uni.showToast({
              title: '签到失败',
              icon: 'none'
            });
          }
        },
        fail: (err) => {
          uni.showToast({
            title: '请求失败',
            icon: 'none'
          });
          console.error('请求失败', err);
        }
      });
    }
  }
};
</script>

<style scoped>
.container {
  padding: 20px;
  text-align: center;
}

.text {
  font-size: 18px;
}
</style>
